// 引入 axios
// 创建 axios 实例
// 拦截器
// 抛出实例
import axios from 'axios'
// import store from '@/store'
// import router from '@/router'
// 基础地址，超时时间   ===> 已完成
// 请求拦截器-统一注入token
// 响应拦截器-解构数据-处理异常
import { Message } from 'element-ui'
// baseURL 最好根据环境可以自己改变对应值 ===>
// 1.开发环境  /api
// 2.线上环境  /prod-api
// 如何来解决 ===> 环境变量的配置
// 配置 ===>  环境文件来配置 ===> 自定义 VUE_APP_BASE_自定义的字段
//           NODE_ENV ===> 默认值 就是当前的环境 ===> 表示环境的变量
// 取值 ===> process.env ===> node 提供的一个变量

// const request = axios.create({
//   baseURL: process.env.VUE_APP_BASE_API,
//   timeout: 5000
// })

const request = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 60000
})

request.interceptors.request.use(config => {
  // token 统一注入 Authorization
  // const token = store.getters.token
  // if (token) {
  //   config.headers.Authorization = `${token}`
  // }
  return config
}, err => {
  return Promise.reject(err)
})

request.interceptors.response.use(response => {
  // 响应拦截器-解构数据-处理异常
  // 接口状态 200 ===>
  // 1.业务逻辑正常（success: true）
  // 2.业务逻辑出现问题 (success: false)
  // console.log(response.data)
  const { statusText, data, status } = response
  // console.log(response)
  // console.log(status)
  if (status) {
    return data
  } else {
    // 提示
    // Promise.reject
    Message({ type: 'error', statusText })
    return Promise.reject(new Error(statusText))
  }

  // return response.data // axios 默认给我包一层data
}, err => {
  // err 只有接口正在报错的时候 才会进
  // console.dir(err)
  // 判断错误类型 ===> 401
  // 本地token删除 / 用户信息删除
  // 去登录页
  // 提示
  // if (err.response.status === 401) {
  //   store.commit('user/delToekn')
  //   store.commit('user/removeUserInfo')
  //   Message({ type: 'error', message: '你的登录状态已经失效，请重新登录' })
  //   router.push('/login')
  // } else {
  //   Message({ type: 'error', message: err.response.data.message || '系统出现错误' })
  // }
  // 对于其他错误 ==> 简单消息提示
  return Promise.reject(err)
})

export default request // 导出axios实例

